﻿using System.Collections.Generic;
using FileManager_Server.ServiceModel.DataTransfer_Model;
using FileManager_Server.ServiceModel.WCF_Args_Model;

namespace FileManager_Server.BusinessLogic.IRepository_Service
{
    public interface IFileService
    {
        FolderResultCollection GetDepartmentFolder();

        FileResultCollection GetFolderFileCollection(FileQueryArgs fileQueryArgs);

        void UploadFile(RemoteFileInfo request,FileAttchInfo fileAttchInfo);

        RemoteFileInfo DownloadFile(DownloadRequest request);

        FileDeleteResult DeleteFileService(FileDeleteArgs fileDeleteArgs);

        FileReNameResult ChangeFileNameService(FileReNameArgs fileReNameArgs);

        FolderReNameResult ChangeFolderNameService(FolderReNameArgs folderReNameArgs);

        FolderDeleteResult DeleteFolderService(FolderDeleteArgs folderDeleteArgs);

        FileCopyToResult CopyFileToOtherFolder(FileCopyToArgs fileCopyToArgs);

        FileCutToResult CutFileToOtherFolder(FileCutToArgs fileCutToArgs);

        FolderCopyToResult CopyFolderToOtherFolder(FolderCopyToArgs folderCopyToArgs);

        FolderCutToResult CutFolderToOtherFolder(FolderCutToArgs folderCutToArgs);

        NewFolderResult CreateNewFolder(NewFolderArgs newFolderArgs);

        FileRoleAddResultCollection GetFolderRole(FileRoleAddArgs fileRoleAddArgs);

        NewFileRoleResultCollection NewFileRole(NewFileRoleCollectionArgs newFileRoleCollectionArgs);

        FileRoleChangeResult ChangeFileRole(FileRoleChangeArgs fileRoleChangeArgs);

        ApplySubFolderRoleResult ApplySubFolderRole(ApplySubFolderRoleArgs applySubFolderRoleArgs);

        DeleteFileRoleResult DeleteFileRole(DeleteFileRoleArgs deleteFileRoleArgs);

        FileLogQueryCountResult GetFileLogCount(FileLogQueryArgs fileLogQueryArgs);

        FileLogResultCollection GetFileLog(FilelogQueryPageArgs filelogQueryPageArgs);

        FileRoleAddResultCollection GetFolderRoleDelegate(FileRoleAddDDelegateArgs fileRoleAddDDelegateArgs);

        FileResultCollection SearchFile(FileSearchArgs fileSearchArgs);

        CheckFileResult CheckFile(CheckFileUploadingArgs checkFileUploadingArgs);

        void DeleteUploadingFile(DeleteUploadingFileArgs deleteUploadingFileArgs);

        void UploadingFileSuccess(UploadingSuccessArgs uploadingSuccessArgs);

        DownloadingCheckFileResultCollection CheckFileInfomation(DownlaodingCheckFilesArgs downlaodingCheckFilesArgs);

        void DownloadingFileSuccess(DownloadingSuccessArgs downloadingSuccessArgs);

        DepartmentSizeResultCollection GetDepartmentSizeCollection();

        int GetDepartmentSizeMB(string departmentId);
    }

    public class FileAttchInfo
    {
        public string FileName { get; set; }
        public string UserId { get; set; }
        public string FolderId { get; set; }
        public long Length { get; set; }
    }

    public class DownlaodAttchInfo
    {
        public string FileName { get; set; }
        public long Length { get; set; }
    }
}